import { axiosInstance } from './axiosHelper'

/**
 * 验证码服务
 */
export const captchaService = {
    /**
     * 生成验证码图片URL
     * @param guid 客户端GUID，用于标识验证码
     * @param width 图片宽度，默认200
     * @param height 图片高度，默认60
     * @returns 验证码图片URL
     */
    generateCaptchaUrl(guid: string, width: number = 200, height: number = 60): string {
        let url = `${axiosInstance.defaults.baseURL}/api/Captcha/GenerateImage/image`;
        const params = [];
        // 确保总是传递GUID参数
        params.push(`guid=${encodeURIComponent(guid)}`);
        if (width !== 200) {
            params.push(`width=${width}`);
        }
        if (height !== 60) {
            params.push(`height=${height}`);
        }
        url += `?${params.join('&')}`;
        return url;
    },
    /**
     * 生成一个新的GUID
     * @returns 新的GUID
     */
    generateGuid(): string {
        return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
            const r = Math.random() * 16 | 0;
            const v = c === 'x' ? r : (r & 0x3 | 0x8);
            return v.toString(16);
        });
    },
    /**
     * 获取验证码图片
     * @param guid 可选的GUID，如果提供则使用该GUID，否则生成新的
     * @param width 图片宽度，默认200
     * @param height 图片高度，默认60
     * @returns Promise<{guid: string, imageUrl: string}>
     */
    async getCaptchaImage(guid?: string, width: number = 200, height: number = 60): Promise<{ guid: string, imageUrl: string }> {
        try {
            // 使用提供的GUID或生成一个新的
            const captchaGuid = guid || this.generateGuid();
            // 构建URL
            const url = this.generateCaptchaUrl(captchaGuid, width, height);
            // 使用URL作为图片源
            return {
                guid: captchaGuid,
                imageUrl: url
            };
        } catch (error) {
            console.error('获取验证码图片失败:', error);
            throw error;
        }
    },

    /**
     * 刷新验证码
     * @param guid 可选的GUID，如果提供则使用该GUID，否则生成新的
     * @returns Promise<{guid: string, imageUrl: string}>
     */
    async refreshCaptcha(guid?: string): Promise<{ guid: string, imageUrl: string }> {
        return await this.getCaptchaImage(guid, 200, 60);
    }
} 